﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace FDXF
{
    class DPI
    {
        [DllImport("gdi32.dll")]
        private static extern int GetDeviceCaps(IntPtr hdc, int index);

        public void xx(PictureBox Picture) 
        {
            // 定义获取Graphics对象所需的控件
            //Panel panel = new Panel();
            // 根据控件所在句柄获取Graphics对象
            Graphics graphics = Graphics.FromHwnd(Picture.Handle);
            // 获取设备句柄
            IntPtr hdc = graphics.GetHdc();

            // 获取屏幕宽度（毫米）HORZSIZE
            int width = GetDeviceCaps(hdc, 4);
            // 获取屏幕高度（毫米）VERTSIZE
            int height = GetDeviceCaps(hdc, 6);
            // 获取屏幕宽度（像素）HORZRES
            int xPixels = GetDeviceCaps(hdc, 8);
            // 获取屏幕高度（像素）VERTRES
            int yPixels = GetDeviceCaps(hdc, 10);
            // 释放设备句柄
            graphics.ReleaseHdc(hdc);
            // 释放Graphics对象
            graphics.Dispose();
            // 计算X轴方向像素与毫米的比率
            double xRate = (double)xPixels / (double)width;
            // 计算Y轴方向像素与毫米的比率
            double yRate = (double)yPixels / (double)height;


            ///像素数换算为毫米数
            // 定义要换算的毫米数
            double millimeter = 10;
            // 计算X轴方向像素数
            int xPixel = (int)Math.Round(xRate * millimeter);
            // 计算Y轴方向像素数
            int yPixel = (int)Math.Round(yRate * millimeter);


            ///毫米数换算为像素数：
            // 定义要换算的像素数
            int pixel = 10;
            // 计算X轴方向毫米数
            double xMillimeter = pixel / xRate;
            // 计算Y轴方向毫米数
            double yMillimeter = pixel / yRate;

        }

    }
}
